import axios, { type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from 'axios';
import { API_CONFIG } from '@/config/constants';

/**
 * API基础配置服务
 * 包含请求和响应拦截器，统一处理错误和请求头
 */
export const service = axios.create({
  baseURL: API_CONFIG.BASE_URL,
  timeout: API_CONFIG.TIMEOUT,
  headers: API_CONFIG.HEADERS
});

// 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在发送请求之前可以做一些处理
    // 例如：添加token、设置时间戳等
    console.log('发送请求:', config.url);
    return config;
  },
  (error) => {
    // 请求错误处理
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 对响应数据进行处理
    const { status, data } = response;

    // 检查HTTP状态码
    if (status >= 200 && status < 300) {
      return response;
    } else {
      console.error('响应状态错误:', status);
      return Promise.reject(new Error(`HTTP Error: ${status}`));
    }
  },
  (error) => {
    // 响应错误处理
    console.error('响应错误:', error.message);

    // 根据不同错误类型进行处理
    if (error.response) {
      // 服务器返回错误状态码
      const { status, data } = error.response;
      console.error(`服务器错误 ${status}:`, data);
    } else if (error.request) {
      // 请求已发出但没有收到响应
      console.error('网络错误: 无法连接到服务器');
    } else {
      // 其他错误
      console.error('请求配置错误:', error.message);
    }

    return Promise.reject(error);
  }
);
